package designPattern.单例模式;

/**
 * @author: li chao
 * @Desc:
 * @create: 2025-11-12 16:48
 **/
public class Singleton {
//    private static Singleton instance;

    private Singleton() {
    }

    // 懒汉式，线程不安全
//    public static Singleton getInstance() {
//        if (instance == null) {
//            instance = new Singleton();
//        }
//        return instance;
//    }


    //  懒汉式，线程安全
//    public static synchronized Singleton getInstance() {
//        if (instance == null) {
//            instance = new Singleton();
//        }
//        return instance;
//    }


//  饿汉式  这种方式比较常用，但容易产生垃圾对象。
//    public static Singleton getInstance() {
//        return instance;
//    }


    // 双检锁/双重校验锁（DCL，即 double-checked locking）
//    private volatile static Singleton singleton;
//    public static Singleton getSingleton() {
//        if (singleton == null) {
//            synchronized (Singleton.class) {
//                if (singleton == null) {
//                    singleton = new Singleton();
//                }
//            }
//        }
//        return singleton;
//    }


    //登记式/静态内部类
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}